package com.frejoys.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.admin.StoreIdAndNameDto;
import com.frejoys.common.dto.store.IdAndPageDto;
import com.frejoys.common.dto.store.StoreIdAndPageDto;
import com.frejoys.common.vo.admin.StoreWalletListVo;
import com.frejoys.common.vo.store.StoreWalletVo;
import com.frejoys.dao.entity.StoreWallet;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface StoreWalletService extends IService<StoreWallet> {

    default StoreWallet getOnly(QueryWrapper<StoreWallet> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default StoreWallet getOnly(LambdaQueryWrapper<StoreWallet> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    /**
     * 根据店铺id查询是否存在店铺钱包（没有则新增有则设值）
     *
     * @param orderSn   订单编号
     * @param price     消费金额
     * @param payStatus 支付状态（支付就+   退款就-）
     */
    void saveStoreWallet(Long orderSn, BigDecimal price, Integer payStatus);

    StoreWalletVo getStoreWalletInfo(IdAndPageDto dto);

    /**
     * 根据店铺id获取,对应id对应的店铺钱包余额
     * @param storeIds 店铺id
     * @return 店铺id与钱包余额Map
     */
    Map<Integer, BigDecimal> getStoreIdMoneyMap(List<Integer> storeIds);


    //管理员查询商家钱包
    IPage<StoreWalletListVo> walletList(StoreIdAndNameDto dto);
}
